home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Sound Cards
/
Programming Sound Cards.iso
/
sound_33
/
gus.asm
< prev
next >
Wrap
Assembly Source File
|
1995-01-01
|
3KB
|
219 lines
Jumps
.286
_Stack Segment Para Stack 'Stack'
db 100h dup (0)
_Stack ends
Extrn MainVolume:Word,ChanOn:Word,PatternRow:Word,PlayingPattern:Word
Extrn LoadMod:Far,ClearMem:Far,StartPlaying:Far,StopPlaying:Far,Init:Far,InitDevice:Far
_Code Segment Para 'Code'
assume cs:_Code
ModToRead db 70 dup (0)
CommandLine db 127 dup (0)
KeySeg dw 0
KeyOfs dw 0
Key db 0
Error db ' Internal Error. Restart the computer and try again.$'
OutOfMem db ' Not enough mem!$'
WrongName db ' File or path not found!$'
Docs db ' Module Player v0.15b (C) Robert Adolfsson (Cascada) 1993.',13,10
db 13,10
db ' For Advanced Gravis UltraSound',13,10
db 13,10
db ' Syntax: GUS <[Path]Filename.ext>.',13,10
db 13,10
db '$'
Even
Begin:
call GetFileName
mov ax,cs
mov ds,ax
mov ax,4A00h
mov bx,4096
int 21h
jnc NoStop
mov ah,9
push cs
pop ds
mov dx,offset cs:[Error]
int 21h
jmp Stop
NoStop:
call InitDevice
call Init
mov dx,cs
mov ds,dx
mov dx,offset cs:[ModToRead]
call LoadMod
call StartPlaying
mov ax,3509h
int 21h
mov cs:[KeySeg],es
mov cs:[KeyOfs],bx
mov ax,2509h
mov dx,cs
mov ds,dx
mov dx,offset cs:[KeyInt]
int 21h
DoLoop:
cmp cs:[Key],1
jne DoLoop
mov ax,2509h
mov ds,cs:[KeySeg]
mov dx,cs:[KeyOfs]
int 21h
call StopPlaying
call ClearMem
Stop:
mov ax,4C00h
int 21h
KeyInt Proc Near
push ax
push ds
mov ax,Seg MainVolume
mov ds,ax
in al,60h
cmp al,127
ja NoKey
mov cs:[Key],al
NoKey:
cmp al,74
jne NoVolDown
sub [MainVolume],4
jns NoVolDown
mov [MainVolume],0
NoVolDown:
cmp al,78
jne NoVolUp
add [MainVolume],4
cmp [MainVolume],64
jbe NoVolUp
mov [MainVolume],64
NoVolUp:
cmp al,81
jne NoChangePatt1
mov [PatternRow],64
NoChangePatt1:
cmp al,73
jne NoChangePatt2
mov [PatternRow],64
sub [PlayingPattern],2
jns NoChangePatt2
mov [PlayingPattern],0
NoChangePatt2:
cmp al,2
jne NoChan1OnOff
xor [ChanOn],00000001b
NoChan1OnOff:
cmp al,3
jne NoChan2OnOff
xor [ChanOn],00000010b
NoChan2OnOff:
cmp al,4
jne NoChan3OnOff
xor [ChanOn],00000100b
NoChan3OnOff:
cmp al,5
jne NoChan4OnOff
xor [ChanOn],00001000b
NoChan4OnOff:
cmp al,6
jne NoChan5OnOff
xor [ChanOn],00010000b
NoChan5OnOff:
cmp al,7
jne NoChan6OnOff
xor [ChanOn],00100000b
NoChan6OnOff:
cmp al,8
jne NoChan7OnOff
xor [ChanOn],01000000b
NoChan7OnOff:
cmp al,9
jne NoChan8OnOff
xor [ChanOn],10000000b
NoChan8OnOff:
in al,61h
or al,80h
out 61h,al
and al,7Fh
out 61h,al
mov al,20h
out 20h,al
pop ds
pop ax
iret
KeyInt EndP
GetFileName Proc Near
push bx
push di
mov di,offset cs:[CommandLine]
mov bx,82h
mov al,es:[bx-2]
cmp al,0
jne TestNext
jmp NoCmdLine
TestNext:
mov al,es:[bx]
cmp al,0
jne GetIt
jmp NoCmdLine
GetIt:
mov al,es:[bx]
inc bx
mov cs:[di],al
inc di
cmp al,0Dh
je GotIt
jmp GetIt
GotIt:
mov di,offset cs:[CommandLine]
mov bx,offset cs:[ModToRead]
MoveName:
mov al,cs:[di]
inc di
cmp al,0Dh
jne NotYetCommand
jmp EndMoveName
NotYetCommand:
cmp al,32
je EndMoveName
mov cs:[bx],al
inc bx
jmp MoveName
EndMoveName:
pop di
pop bx
ret
GetFileName Endp
NoCmdLine:
mov ah,9
push cs
pop ds
mov dx,offset cs:[Docs]
int 21h
mov ax,4C00h
int 21h
_Code ends
end Begin